#include "Item.h"
#include "Exception.h"

/**
constructeur par default
*/
Item::Item( )
	: _type( IT_NULL ), _valNull( true ) {}

/**
Constructeur
@param[in]	val	valeur entiere
*/
Item::Item( const int& val )
	: _type( IT_INTEGER ), _valInt( val ), _valNull( false ) {}

/**
Constructeur
@param[in]	val	valeur chaine
*/
Item::Item( const std::string& val )
	: _type( IT_TEXT ), _valStr( val ), _valNull( false ) {}

/**
Constructeur
@param[in]	val	valeur decimal
*/
Item::Item( const double& val )
	: _type( IT_REAL ), _valReal( val ), _valNull( false ) {}

/**
@return la valeur sous forme de chaine
*/
std::string Item::get() const
{
	switch( _type )
	{
		case IT_NULL: return "NULL";
		case IT_INTEGER: return toStringA<int>(_valInt);
		case IT_REAL: return toStringA<double>(_valReal);
		case IT_TEXT:{ std::string str = "'"; return str + _valStr + "'"; }
	}
}

/**
Surcharge d'operateur ostream pour l'affichage d'un item
*/
std::ostream& operator << ( std::ostream &o, const Item& i )
{
	o << i.get();
	return o;
}
